package core;

import com.android.volley.Response;
import com.android.volley.VolleyError;

/**
 * Data 处理器
 */
public abstract class DataListener<T extends Data> implements Response.Listener<T>, Response.ErrorListener {

    /******************** Response.ErrorListener ********************/
    /**
     * Volley请求发生错误
     */
    @Override
    public final void onErrorResponse(VolleyError error) {
        DataError flyError = new DataError(error);
        if (flyError.netCode == DataError.DEFAULT_NET_SUCCESS) {//网络码没有设置
            onDataErrorResponse(flyError);
        } else {
            onFlyNetError(flyError);
        }
        onDataFinished();
    }

    /******************** Response.Listener<T> ********************/

    /**
     * Volley请求正确
     */
    @Override
    public final void onResponse(T data) {
        onDataResponse(data);
    }

    /******************** 具体操作 ********************/

    /**
     * 网络部分发生错误(由Volley分发)
     */
    public void onFlyNetError(DataError error) {
        onDataErrorResponse(error);//默认也调用 onDataErrorResponse 处理
    }

    /**
     * 网络正确,响应正确
     */
    public void onDataResponse(T data) {
    }

    /**
     * 网络正确,但是响应处理部分发生错误(由 SDK 分发)
     */
    public void onDataErrorResponse(DataError error) {
    }

    /**
     * 请求完成(最后一步调用)
     */
    public void onDataFinished() {
    }
}
